package com.itheima.aspect;

import org.aspectj.lang.ProceedingJoinPoint;

public class MyAspect {

    /**
     * 前置增强
     */
    public void before(){
        System.out.println("前增强...");
    }

    /**
     * 后置增强
     */
    public void after(){
        System.out.println("后增强...");
    }

    /**
     * 方法出现异常后通知
     */
    public  void throwException(){
        System.out.println("方法出现错误了....");
    }

    /**
     * 最终通知方法,顺序不一定会在最后执行
     */
    public void finallyMethod(){
        System.out.println("最终通知执行....");
    }

    /**
     * 环绕通知方法
     * 必须定义返回值******
     * 对目标方法的封装
     * 开发常用,独立使用
     */
    public Object aroundMethod(ProceedingJoinPoint pjp){


        Object result = null;
        try {
            //前置通知
            System.out.println("环绕执行前.....");
            //返回结果
            result = pjp.proceed();
            //后置通知
            System.out.println("环绕执行后.....");

        } catch (Throwable throwable) {
            //方法出现异常通知
            System.out.println("方法出现异常....");
            throwable.printStackTrace();

        }finally {
            //最终执行
            System.out.println("最终....");
        }


        return result;
    }

}
